package com.platform.utils;

import cn.hutool.core.util.StrUtil;
import cn.hutool.core.util.URLUtil;
import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.github.qcloudsms.SmsMultiSender;
import com.github.qcloudsms.SmsMultiSenderResult;

import java.util.Map;
import java.util.stream.Collectors;

/**
 * https://github.com/qcloudsms/qcloudsms_java/blob/master/src/test/java/QcloudSmsTest.java
 *
 * @author lipengjun
 * @date 2017年11月18日 下午13:13:23
 */
public class SmsUtil {

    /**
     * 指定模板ID群发
     * 签名参数未提供或者为空时，会使用默认签名发送短信
     *
     * @param appid
     * @param appkey
     * @param phoneNumbers
     * @param templateId
     * @param params
     * @param smsSign
     * @return
     */
    public static SmsMultiSenderResult crSendSms(int appid, String appkey, String[] phoneNumbers, int templateId, String[] params, String smsSign) {
        SmsMultiSenderResult result = new SmsMultiSenderResult();
        try {
            SmsMultiSender msender = new SmsMultiSender(appid, appkey);
            result = msender.sendWithParam("86", phoneNumbers,
                    templateId, params, smsSign, "", "");
        } catch (Exception e) {
            // 网络IO错误
            e.printStackTrace();
        }
        return result;
    }


    /**
     * 指定模板ID单发短信
     * 签名参数未提供或者为空时，会使用默认签名发送短信
     *
     * @param appkey
     * @param phoneNumber
     * @param templateId
     * @param params
     * @return
     */
    public static JSONObject crSendSms(String appkey, String phoneNumber, int templateId, Map<String,String> params) {
        String req = params.entrySet().stream().map(e->StrUtil.format("#{}#={}",e.getKey(), e.getValue())).collect(Collectors.joining("&"));

        String res = HttpUtil.get(StrUtil.format("http://v.juhe.cn/sms/send?mobile={}&tpl_id={}&tpl_value={}&key={}"
                    ,phoneNumber
                    ,templateId
                    ,URLUtil.encode(req)
                    ,appkey
                ));
        return JSON.parseObject(res);
    }
}
